package cn.icatw.leetcode.editor.cn;
//给你一个正整数 n ，生成一个包含 1 到 n² 所有元素，且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
//
//
//
// 示例 1：
//
//
//输入：n = 3
//输出：[[1,2,3],[8,9,4],[7,6,5]]
//
//
// 示例 2：
//
//
//输入：n = 1
//输出：[[1]]
//
//
//
//
// 提示：
//
//
// 1 <= n <= 20
//
//
// Related Topics 数组 矩阵 模拟 👍 1268 👎 0


//Java：螺旋矩阵 II
public class T59_SpiralMatrixIi {
    public static void main(String[] args) {
        Solution solution = new T59_SpiralMatrixIi().new Solution();
        // TO TEST
        int[][] ints = solution.generateMatrix(2);
        System.out.println(ints);
    }

    //leetcode submit region begin(Prohibit modification and deletion)
    class Solution {
        public int[][] generateMatrix(int n) {
            int[][] ints = new int[n][n];
            //上下左右边界
            int top = 0, bottom = n - 1, left = 0, right = n - 1;
            //计数
            int num = 1;
            while (num <= n * n) {
                //绕圈，先上面从左往右，再右边从上往下，下边从右往左，左边从下往上
                //    上边
                for (int i = left; i <= right; i++) {
                    ints[top][i] = num;
                    num++;
                }
                top++;
                //    右边，从上往下
                for (int i = top; i <= bottom; i++) {
                    ints[i][right] = num;
                    num++;
                }
                right--;
                //    下边，从右往左
                for (int i = right; i >= left; i--) {
                    ints[bottom][i] = num;
                    num++;
                }
                bottom--;
                //    左边，从下往上
                for (int i = bottom; i >= top; i--) {
                    ints[i][left] = num;
                    num++;
                }
                left++;
            }
            return ints;
        }
    }
//leetcode submit region end(Prohibit modification and deletion)

}
